

package com.hazelcast.client.impl.connection.tcp;

import com.hazelcast.client.impl.clientside.HazelcastClientInstanceImpl;
import com.hazelcast.client.impl.connection.ClientConnection;
import com.hazelcast.internal.networking.Channel;
import com.hazelcast.internal.networking.ChannelCloseListener;

/**
 * A listener to notify pending invocations that are sent
 * over the TPC channels with exception, in case the TPC
 * channel is closed.
 * <p>
 * The invocations that will be notified with this listener
 * are the ones that are sent with the ClientConnection adapter
 * of the TPC channel, such as heartbeats.
 */
public class TpcChannelCloseListener implements ChannelCloseListener {

    private final HazelcastClientInstanceImpl client;

    public TpcChannelCloseListener(HazelcastClientInstanceImpl client) {
        this.client = client;
    }

    @Override
    public void onClose(Channel channel) {
        ClientConnection adapter = (ClientConnection) channel.attributeMap().get(TpcChannelClientConnectionAdapter.class);
        assert adapter != null;

        client.getInvocationService().onConnectionClose(adapter);
    }
}
